10699. Подсчет делителей
По заданному положительному
целому числу n вычислить количество его простых делителей.
Вход.
Каждая входная строка содержит число n (n £ 1000000). Число n = 0 является концом входных данных и не
обрабатывается.
Выход. Для каждого числа n
вывести количество его простых делителей в формате, приведенном в примере.
289384
930887
692778
636916
747794
238336
885387
760493
516650
641422
0
Пример выхода
289384 : 3
930887 : 2
692778 : 5
636916 : 4
747794 : 3
238336 : 3
885387 : 2
760493 : 2
516650 : 3
641422 : 3
разложение на множители
Перебираем последовательно
делители числа n, начиная с 2. При обнаружении делителя делим n
на него до тех пор пока деление возможно без остатка. Делители ищем до тех пор,
пока n не станет равным 1.
Рассмотрим первый тест.
Делителями числа n = 289384 будут 2, 61 и 593, так как 289384 = 23
* 61 * 593. Таким образом, число 289384 имеет 3 делителя.
Читаем значение n,
обнуляем счетчик количества делителей count. Запоминаем исходное
значение n в переменной tempn.
while (scanf("%d",&n),n)
{
count = 0; tempn = n;
Для каждого значения i =
2, 3, ... проверяем, является ли оно делителем n. Если является, то
увеличиваем count на 1 и делим n на i до тех пор, пока
деление проводится без остатка.
for(i = 2; i
<= n; i++)
{
if (n % i
== 0) count++;
while (n %
i == 0) n = n / i;
}
Выводим исходное число n и
вычисленное количество делителей.
printf("%d :
%d\n",tempn,count);
}